/**
 * 基于 axios 封装的请求模块
 */

import axios from 'axios'

// 创建请求对象
export const request = axios.create({
  baseURL: 'https://conduit.productionready.io/api'
})

// 通过插件机制获取到上下文对象（query、params、req、res、app、store...）
// 插件导出函数必须作为 default 成员
export default ({ store, redirect }) => {
  // 请求拦截器
  // Add a request interceptor
  // 任何请求都要经过请求拦截器
  // 我们可以在请求拦截器中做一些公共的业务处理,例如统一设置 token
  request.interceptors.request.use(function (config) {
    // Do something before request is sent
    // 请求就会经过这里
    
    const { user } = store.state.user
    if (user && user.token) {
      config.headers.Authorization = `Token ${user.token}`
    }
    // 返回 config 请求配置对象
    return config
   
  }, function (error) {
    // 如果请求失败(此时请求还没有发出去)就会进入这里
    // Do something with request error
    return Promise.reject(error)
  })
  // 响应拦截
  request.interceptors.response.use(
    response =>{
      return response.data ? response.data : response
    },
    err =>{
      //如果接口401了则跳转至登录页面
      if(err.response){
        if(err.response.status === 401) redirect('/login')
        return Promise.reject(err.response.data.errors)
      }  else {
        return Promise.reject(err)
      }
    }
  )
}